const path = require("path");
// 引入scp2库
const scpClient = require("scp2");
// node模块 - node.js 命令行环境的 loading效果和显示各种状态的图标
const ora = require("ora");
// deploy.js
const serverConfig = {
  dev: {
    host: "dev_server_ip",
  },
  prv: {
    host: "127.0.0.1",
    port: "22",
    username: "root",
    password: "123456",
    path: "/www/project/proName",
  },
  prd: {
    host: "prd_server_ip",
  },
};

const env = process.argv.pop();

if (!serverConfig[env]) {
  console.error(`Unsupported environment: ${env}`);
  process.exit(1);
} else {
  // 获取当前环境对应的提示名称，使用模糊匹配
  const currentEnvName = getEnvDescription(env);
  const server = serverConfig[env];
  console.log(server)
  console.log("当前发布环境:", currentEnvName);
  // node 终端提示语，process.env：当前进程环境
  const spinner = ora(`正在发布到${currentEnvName}服务器...`);
  // loading
  spinner.start();
  // 执行scp2库，上传文件
  // 第一个参数：要上传到服务器的文件
  // 第二个参数：服务器配置
  // 第三个参数：上传回调函数
  scpClient.scp(
    path.resolve(__dirname, "dist"),
    {
      host: server.host,
      port: server.port,
      username: server.username,
      password: server.password,
      path: server.path,
    },
    function (err) {
      spinner.stop();
      if (err) {
        console.log("发布失败.\n");
        throw err;
      } else {
        console.log(`Success! 成功发布到${currentEnvName}服务器! \n`);
      }
    }
  );
}

// 辅助函数：实现模糊匹配获取环境描述
function getEnvDescription(envKey) {
  const serverEnvMap = {
    dev: "测试",
    prv: "预发",
    prd: "正式",
  };

  for (const key in serverEnvMap) {
    if (key.toLowerCase().includes(envKey.toLowerCase())) {
      return serverEnvMap[key];
    }
  }
  // 如果没有找到匹配项，返回默认值或处理错误
  return "未知环境";
}